// 严格字面量检查
// 字面量的结构跟类型定义的不一样（比如多出了未定义的属性），就会报错
const point: { x: number; y: number } = {
  x: 1,
  y: 2,
  // z: 3, 报错
}

// 等号右边是一个对象的字面量，这时会触发严格字面量检查
// 只要有类型声明中不存在的属性（本例是z），就会导致报错

// 如果等号右边不是字面量，而是一个变量，根据结构类型原则，是不会报错的
const myPoint = {
  x: 1,
  y: 2,
  z: 3
}

const point01: { x: number; y: number } = myPoint // 正确
// 等号右边是一个变量，就不会触发严格字面量检查，从而不报错

type Options = {
  title: string,
  darkMode?: boolean
}

let obj: Options = {
  title: 'my website',
  darkMode: true
}

let myOptions = {
  title: '我的网站',
  darkmode: false
}

obj = myOptions // 不会报错 触发结构类型原则 不会触发严格字面量规则

interface IPoint {
  x: number
  y: number
}

function computeDistance(point: IPoint) {
  // todo
}

// computeDistance({ x: 1, y: 2, z: 3 }) 报错
computeDistance({ x: 1, y: 2 })







